/**
 * @(#)ProcessSystem.java 2009-11-16
 *   
 * Copyright  (c) 2009-2010 Wilmar IT Service,  Inc.   
 * All  rights  reserved.   
 * TODO
 */

package com.wilmar.process.system;

import java.io.Serializable;
import java.util.Map;

import org.springframework.web.context.WebApplicationContext;

import com.wilmar.process.core.ProcessSystemDeclareKeys;
import com.wilmar.process.entity.EmailServer;
import com.wilmar.process.enumerate.EnumProcessBeanIdSet;
import com.wilmar.process.enumerate.EnumSystemParameterNameSet;

/**
 * 整个系统的全局变量存放处
 * 
 * @author makubex Email:makubexnet@gmail.com
 * @version 1.0.0
 */
public class ProcessSystem implements Serializable {

	/**
	 * @serialField
	 */
	private static final long serialVersionUID = 373338725475436033L;

	/**
	 * 内部构造函数
	 */
	private ProcessSystem() {
	}

	/**
	 * Spring的上下文
	 */
	public static WebApplicationContext webAppContext;

	/**
	 * 当前系统使用的参数
	 */
	public static Map<EnumSystemParameterNameSet, Object> systemParameters;

	/**
	 * 工作流系统使用的邮件服务器
	 */
	private static EmailServer emailServer = null;

	/**
	 * 获取在系统启动时注册到spring的bean
	 * 
	 * @param beanId
	 *            beanId
	 * @return spring管理的bean
	 */
	public static Object getBean(EnumProcessBeanIdSet beanId) {
		return webAppContext.getBean(beanId.getId());
	}

	/**
	 * 确保系统已经成功启动
	 * 
	 * @return 系统是否已经启动
	 */
	public static boolean isReady() {
		if (webAppContext == null)
			return false;
		else
			return true;
	}

	/**
	 * 获取系统使用的邮件服务器配置
	 * 
	 * @return the emailServer
	 */
	public static EmailServer getEmailServer() {
		if (emailServer == null) {
			if (!systemParameters
					.containsKey(EnumSystemParameterNameSet.MAIL_SERVER_PROPERTY_FILE)) {
				systemParameters
						.put(
								EnumSystemParameterNameSet.MAIL_SERVER_PROPERTY_FILE,
								ProcessSystemDeclareKeys.DEFAULT_SYSTEM_EMAILSERVER_CONFIGURATION_FILE);
			}
			emailServer = new EmailServer(
					new ProcessSystem()
							.getClass()
							.getResourceAsStream(
									systemParameters
											.get(
													EnumSystemParameterNameSet.MAIL_SERVER_PROPERTY_FILE)
											.toString()));
		}
		return emailServer;
	}
}
